Наша задача в этом шаге пробежать ветвям реестра и получить все пункты. Самый простой и наверно эффективный способ использовать рекурсивные вызовы. Давайте пробовать.
using System;
using Microsoft.Win32;
class MainClass
{
public static void Main(string[] args)
{
RegistryKey rk = Registry.CurrentConfig;
GetNext(rk);
}
public static void GetNext(RegistryKey rk)
{
foreach (string s in rk.GetSubKeyNames())
{
Console.WriteLine(s);
GetNext(rk.OpenSubKey(s));
}
}
}
Получаем пункт реестра, идем глубже, потом еще глубже и так до самого конца. Вот результат.

А вот реестр.
